<?php


namespace app\back\controller;


use app\back\model\RoleModel;
use app\middleware\BackAuth;
use think\facade\Validate;
use app\Request;
use think\response\Json;
use think\validate\ValidateRule;

/**角色管理
 * Class Role
 * @package app\back\controller
 */
class Role
{
    protected $middleware = [BackAuth::class];

    /**获取角色列表
     * @param Request $request
     * @return Json
     */
    public function getRoleList(Request $request)
    {
        // 获取参数
        $input['limit'] = $request->post('limit');
        $input['page'] = $request->post('page');
        $input['name'] = $request->post('name');
        $input['status'] = $request->post('status');
        // 参数校验
        $validate = Validate::rule([
            'limit' => ValidateRule::isRequire(null, '缺少参数'),
            'page' => ValidateRule::isRequire(null, '缺少参数'),
            'name' => function($value) {
                return $value === null ? '缺少参数' : true ;
            },
            'status' => function($value) {
                return in_array($value, ['', '1','0'], true) ? true : '不合法数据';
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return RoleModel::getRoleList($input,$request->info);
    }



    /**添加角色
     * @param Request $request
     * @return Json
     */
    public function addRole(Request $request)
    {
        // 获取参数
        $input['menu_ids'] = $request->post('menu_ids');
        $input['name'] = $request->post('name');
        // 参数校验
        $validate = Validate::rule([
            'name' => ValidateRule::isRequire(null, '缺少参数'),
            'menu_ids' => ValidateRule::isRequire(null, '缺少参数')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return RoleModel::addRole($input,$request->info);
    }

    /**修改角色状态
     * @param Request $request
     * @return Json
     */
    public function changeRoleStatus(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        $input['status'] = $request->post('status');
        // 参数校验
        $validate = Validate::rule([
            'id' =>ValidateRule::regex("/^[1-9][0-9]*$/", '非法数据'),
            'status' => function($value) {
                return in_array($value,['0', '1'], true) ? true : '非法数据';
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return RoleModel::changeRoleStatus($input,$request->info);
    }

    /**获取单个角色信息
     * @param Request $request
     * @return Json
     */
    public function getRoleOnly(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' =>  ValidateRule::regex("/^[1-9][0-9]*$/", '非法数据')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return RoleModel::getRoleOnly($input,$request->info);
    }

    /**删除角色
     * @param Request $request
     * @return Json
     */
    public function delRole(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::regex("/^[1-9][0-9]*$/", '非法数据'),
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return RoleModel::delRole($input,$request->info);
    }

    /**编辑角色信息
     * @param Request $request
     * @return Json
     */
    public function editRole(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        $input['name'] = $request->post('name');
        $input['menu_ids'] = $request->post('menu_ids');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::regex("/^[1-9][0-9]*$/", '非法数据'),
            'name' => ValidateRule::isRequire(null, '缺少参数'),
            'menu_ids' => ValidateRule::isRequire(null, '缺少参数')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return RoleModel::editRole($input,$request->info);
    }

    /**获取当前管理员下级角色
     * @param Request $request
     * @return Json
     */
    public function getAdminRole(Request $request)
    {
        // 逻辑处理
        return RoleModel::getAdminRole($request->info);
    }

    /**获取单个角色菜单信息
     * @param Request $request
     * @return Json
     */
    public function getRoleMenuOnly(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' =>  ValidateRule::regex("/^[1-9][0-9]*$/", '非法数据')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return RoleModel::getRoleMenuOnly($input,$request->info);
    }

    /**编辑角色菜单信息
     * @param Request $request
     * @return Json
     */
    public function editRoleMenu(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        $input['left_menu_ids'] = $request->post('left_menu_ids');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::regex("/^[1-9][0-9]*$/", '非法数据'),
            'left_menu_ids' => ValidateRule::isRequire(null, '缺少参数')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return RoleModel::editRoleMenu($input,$request->info);
    }
}